package negocio;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import entity.CampaniaBD;
import entity.ConceptoBD;
import fachade.PrincipalFachade;

public abstract class Campania {
	

	protected int codCampania;
	protected String descripcion;
	protected Date fechaAlta;
	protected Date fechaBaja;
	protected Empresa empresa;
	protected List<Concepto> conceptos;
	protected float revenueCarrier;
	protected float revenueCliente;
	
	public Campania(){}
	
	public Campania(int codCampania, String descripcion, Date fechaAlta,
			Date fechaBaja, Empresa empresa, float revenueCarrier,
			float revenueCliente, List<Concepto> conceptos) {
		super();
		this.codCampania = codCampania;
		this.descripcion = descripcion;
		this.fechaAlta = fechaAlta;
		this.fechaBaja = fechaBaja;
		this.empresa = empresa;
		this.revenueCarrier = revenueCarrier;
		this.revenueCliente = revenueCliente;
		this.conceptos=conceptos;
	}
	
	
	public Campania(CampaniaBD campaniaBD) throws Exception{
		this.codCampania = campaniaBD.getId_campania();
		this.conceptos = new LinkedList<Concepto>();
		
		this.conceptos = PrincipalFachade.getInstance().getiConceptosFachade().getConceptosAdicionalesDeCampaniaId(campaniaBD.getId_campania());
		this.descripcion = campaniaBD.getDescripcion();
		if(campaniaBD.getEmpresa().getTipo_empresa().equalsIgnoreCase("Carrier"))
			this.empresa = new Carrier(campaniaBD.getEmpresa());
		else
			this.empresa = new Cliente(campaniaBD.getEmpresa());
		
		this.fechaAlta = campaniaBD.getFecha_alta();
		this.fechaBaja = campaniaBD.getFecha_baja();
		this.revenueCarrier = campaniaBD.getRevenue_carrier();
		this.revenueCliente = campaniaBD.getRevenue_cliente();
	}
	
	public int getCodCampania() {
		return codCampania;
	}
	public void setCodCampania(int codCampania) {
		this.codCampania = codCampania;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public Date getFechaAlta() {
		return fechaAlta;
	}
	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}
	public Date getFechaBaja() {
		return fechaBaja;
	}
	public void setFechaBaja(Date fechaBaja) {
		this.fechaBaja = fechaBaja;
	}
	public Empresa getEmpresa() {
		return empresa;
	}
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
	public float getRevenueCarrier() {
		return revenueCarrier;
	}
	public void setRevenueCarrier(float revenueCarrier) {
		this.revenueCarrier = revenueCarrier;
	}
	public float getRevenueCliente() {
		return revenueCliente;
	}
	public void setRevenueCliente(float revenueCliente) {
		this.revenueCliente = revenueCliente;
	}
	
	
	
	public List<Concepto> getConceptos() {
		return conceptos;
	}


	public void setConceptos(List<Concepto> conceptos) {
		this.conceptos = conceptos;
	}

	
	public List<Campania> getCampanias(){
		List<Campania> lista = new ArrayList<Campania>();
		//buscar en la bd todas las campanias con = codCampania
		return lista;
		
	}

	public abstract List<ItemComprobante> getItemsAFacturar(Empresa e, int periodo, boolean incluirConceptosAdicionales) throws Exception;
	
	

}
